/**
 * ReportGear(2011)
 */
package com.reportgear.report.model.calculator;

import net.abbp.report.model.ReportModel;

/**
 * 计算辅助 类
 * 
 * @version 1.0 2011-4-19
 * @author <a herf="lexloo@gmail.com">lexloo</a>
 * @since Report 1.0
 */
public class CalculatorHelper {
    /**
     * 计算薪酬报表
     * 
     * @param model
     *            待计算的模型
     */
    public static ReportModel calculateSalaryReportModel(ReportModel model) {
        ReportModel calcModel = model.clone();

        // MessageWindow.INSTANCE.show("报表计算中,请等待...");
        // 计算参数
        CalcParameter parameter = new CalcParameter();
        parameter.calculate(calcModel);

        // 计算参数(当前不要计算参数,下次计算参数的时候注意有些参数不要计算)
        // calcModel = new ParameterCalculator().calculate(calcModel, false);
        // 清理空单元格
        calcModel = new ClearCalculator().calculate(calcModel, parameter);
        // 计算公式
        calcModel = new FormulaCalculator().calculate(calcModel, parameter);

        // MessageWindow.INSTANCE.hide();

        return calcModel;
    }

    /**
     * 计算简历模型
     * 
     * @param model
     * @param id
     *            员工Id
     */
    public static ReportModel calResumeModel(ReportModel model, String id) {
        ReportModel calcModel = model.clone();

        CalcParameter parameter = new CalcParameter();
        parameter.calculate(calcModel);

        parameter.addParameter("PersonId", id);

        // 清理空单元格
        // calcModel = new ClearCalculator().calculate(calcModel, parameter);

        // 计算简历
        calcModel = new ResumeCalculator().calculate(calcModel, parameter);
        // 计算公式
        calcModel = new FormulaCalculator().calculate(calcModel, parameter);
        // 计算子报表
        calcModel = new SubReportCalculator().calculate(calcModel, parameter);

        return calcModel;
    }
}
